//构造函数继承

// 借用构造函数继承（经典继承）
// 复制父类构造函数内的属性

/*

优点：
1.避免了引用类型的属性被所有实例共享
2.可以在Child中向Parent传参

缺点：
1.只是子类的实例，不是父类的实例
2.方法都在构造函数中定义，每次创建实例都会创建一遍方法

*/


function Person(name){
    this.name = name||'xiaopao';
    this.colors = ['red', 'blue', 'green'];
}

Person.prototype.getName = function(){
    console.log(this.name);
}
Person.prototype.setName = function(name){
    this.name = name;
    this.colors.push(name);
    console.log(this.name);
}

function Child(name){
    Person.call(this,name);
}

var child1 = new Child('ma1');
var child2 = new Child('ma2');
child1.colors.push('yellow');
console.log(child1.name,child2.name);
console.log(child1.colors);
console.log(child2.colors);

var Person1 = new Person();
Person1.setName('p1');
console.log(child1.name,child2.name);
console.log(child1.colors);
console.log(child2.colors);

console.log(child1 instanceof Person);

// ma1 ma2
// [ 'red', 'blue', 'green', 'yellow' ]
// [ 'red', 'blue', 'green' ]
// p1
// ma1 ma2
// [ 'red', 'blue', 'green', 'yellow' ]
// [ 'red', 'blue', 'green' ]
// false